Tarea 1¶

En este ocasión useré la misma base

In [5]:
import pandas as pd
linkData="https://github.com/SocialAnalytics-StrategicIntelligence/TableOperations/raw/main/dengue_ok.pkl"

dengue = pd.read_pickle(linkData)

# checking format
dengue.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 501236 entries, 0 to 501235
Data columns (total 9 columns):
 #   Column        Non-Null Count   Dtype   
---  ------        --------------   -----   
 0   departamento  501236 non-null  object  
 1   provincia     501236 non-null  object  
 2   distrito      501236 non-null  object  
 3   ano           501236 non-null  int64   
 4   semana        501236 non-null  int64   
 5   sexo          501236 non-null  object  
 6   edad          501236 non-null  int64   
 7   enfermedad    501236 non-null  category
 8   case          501236 non-null  int64   
dtypes: category(1), int64(4), object(4)
memory usage: 31.1+ MB
In [6]:
# descripción
dengue.describe().apply(lambda s: s.apply('{0:.5f}'.format))
Out[6]:
ano semana edad case
count 501236.00000 501236.00000 501236.00000 501236.00000
mean 2014.77213 21.99838 28.96143 1.00000
std 6.14646 14.76658 18.15954 0.00000
min 2000.00000 1.00000 0.00000 1.00000
25% 2011.00000 11.00000 15.00000 1.00000
50% 2016.00000 18.00000 26.00000 1.00000
75% 2020.00000 32.00000 41.00000 1.00000
max 2022.00000 53.00000 106.00000 1.00000
In [7]:
#renombrar
dengue['enfermedad_text']=dengue.enfermedad.astype(str)

dengue.replace({'enfermedad_text':{'SIN_SEÑALES':'1_SIN_SEÑALES','ALARMA':'2_ALARMA','GRAVE':'3_GRAVE'}},inplace=True)
In [8]:
# por año
dengue.ano.value_counts(sort=False)
Out[8]:
ano
2000     5557
2001    23526
2002     8086
2003     3349
2004     9547
2005     5640
2006     4022
2007     6344
2008    12824
2009    13407
2010    16842
2011    28084
2012    28505
2013    13092
2015    35816
2014    17234
2016    25160
2017    68279
2018     4698
2019    15287
2020    47932
2021    44791
2022    63214
Name: count, dtype: int64
In [9]:
# grupos edades

binLimits=[0,15,50,110]
theLabels=["a_menor_a_16","b_entre_16y50","c_mayor_a_50"]
dengue["edad_grupos"]=pd.cut(dengue['edad'], include_lowest=True,
                                     bins=binLimits, 
                                     labels=theLabels,
                                     ordered=True)

# see

dengue.head()
Out[9]:
departamento provincia distrito ano semana sexo edad enfermedad case enfermedad_text edad_grupos
0 HUANUCO LEONCIO PRADO LUYANDO 2000 47 M 9 SIN_SEÑALES 1 1_SIN_SEÑALES a_menor_a_16
1 HUANUCO LEONCIO PRADO LUYANDO 2000 40 F 18 SIN_SEÑALES 1 1_SIN_SEÑALES b_entre_16y50
2 HUANUCO LEONCIO PRADO JOSE CRESPO Y CASTILLO 2000 48 F 32 SIN_SEÑALES 1 1_SIN_SEÑALES b_entre_16y50
3 HUANUCO LEONCIO PRADO JOSE CRESPO Y CASTILLO 2000 37 F 40 SIN_SEÑALES 1 1_SIN_SEÑALES b_entre_16y50
4 HUANUCO LEONCIO PRADO MARIANO DAMASO BERAUN 2000 42 M 16 SIN_SEÑALES 1 1_SIN_SEÑALES b_entre_16y50
In [10]:
# para tabla
pd.crosstab( dengue.enfermedad_text,dengue.edad_grupos, dropna=False, normalize='columns')
Out[10]:
edad_grupos a_menor_a_16 b_entre_16y50 c_mayor_a_50
enfermedad_text
1_SIN_SEÑALES 0.876868 0.890247 0.884549
2_ALARMA 0.119010 0.105475 0.109204
3_GRAVE 0.004122 0.004278 0.006248

Análisis semanalmente del año 2017¶

In [11]:
# Filtrar datos para el año 2000
dengue_2000 = dengue[dengue['ano'] == 2000]

# Ver las primeras filas del DataFrame resultante
print(dengue_2000.head())
  departamento      provincia                distrito   ano  semana sexo  \
0      HUANUCO  LEONCIO PRADO                 LUYANDO  2000      47    M   
1      HUANUCO  LEONCIO PRADO                 LUYANDO  2000      40    F   
2      HUANUCO  LEONCIO PRADO  JOSE CRESPO Y CASTILLO  2000      48    F   
3      HUANUCO  LEONCIO PRADO  JOSE CRESPO Y CASTILLO  2000      37    F   
4      HUANUCO  LEONCIO PRADO   MARIANO DAMASO BERAUN  2000      42    M   

   edad   enfermedad  case enfermedad_text    edad_grupos  
0     9  SIN_SEÑALES     1   1_SIN_SEÑALES   a_menor_a_16  
1    18  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
2    32  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
3    40  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
4    16  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
In [15]:
dengue_2000.enfermedad.value_counts()
Out[15]:
enfermedad
SIN_SEÑALES    5557
ALARMA            0
GRAVE             0
Name: count, dtype: int64

Como se observo, en el año 2000 no se registraron casos en "alarma" y "grave", por lo que se analizará el año 2017

In [16]:
# Filtrar datos para el año 2017
dengue_2017 = dengue[dengue['ano'] == 2017]

# Ver las primeras filas del DataFrame resultante
print(dengue_2017.head())
       departamento provincia   distrito   ano  semana sexo  edad  \
257032     AYACUCHO    HUANTA  LLOCHEGUA  2017       1    M    23   
257033     AYACUCHO    HUANTA  LLOCHEGUA  2017       1    M    31   
257034     AYACUCHO    HUANTA      SIVIA  2017       1    F    40   
257035        PIURA   SULLANA    SULLANA  2017       1    F    23   
257036        PIURA   SULLANA    SULLANA  2017       1    M    13   

         enfermedad  case enfermedad_text    edad_grupos  
257032  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
257033  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
257034  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
257035  SIN_SEÑALES     1   1_SIN_SEÑALES  b_entre_16y50  
257036       ALARMA     1        2_ALARMA   a_menor_a_16  
In [17]:
dengue_2017.enfermedad.value_counts()
Out[17]:
enfermedad
SIN_SEÑALES    60381
ALARMA          7664
GRAVE            234
Name: count, dtype: int64
In [12]:
import altair as alt
alt.data_transformers.enable("vegafusion")
Out[12]:
DataTransformerRegistry.enable('vegafusion')

Primer gráfico

In [21]:
# Grafico MEDIA de la edad de todos los casos 

alt_dengue_2017 = alt.Chart(dengue_2017)

# Configurar la codificación para el gráfico, utilizando 'semana' en lugar de 'año'
enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',  # 'Q' indica datos cuantitativos
    y='mean(edad):Q',
    color='enfermedad_text:N'
)
grafico = enc_dengue_2017.mark_line() + enc_dengue_2017.mark_errorband()
grafico
Out[21]:

Segundo gráfico

In [23]:
# grafico con la media de las edades, pero seccionados en los 3 grupos

enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',  # Eje x para las semanas, cuantitativo
    y='median(edad):Q',  # Mediana de edad
    color='enfermedad_text:N',  # Colorear por tipo de enfermedad
    tooltip=['median(edad):Q', 'semana:Q']  # Mostrar mediana de edad y semana en el tooltip
).interactive()  # Hacer el gráfico interactivo

# Crear un gráfico de líneas con facetas por sexo y edad_grupos
grafico = enc_dengue_2017.mark_line().facet(
    row='sexo:N',  # Facetas por sexo
    column='edad_grupos:N'  # Facetas por grupo de edad
)
grafico
Out[23]:

segundo grafico

In [24]:
#graficos de la suma de los casos seccionado en los 3 grupos de edades, la x son las semana

enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',  # Eje x para las semanas, cuantitativo
    y=alt.Y('sum(case):Q'),  # Suma de casos
    color='enfermedad_text:N',  # Colorear por tipo de enfermedad
    tooltip=['sum(case):Q', 'semana:Q']  # Mostrar suma de casos y semana en el tooltip
).interactive()  # Hacer el gráfico interactivo

# Crear un gráfico de líneas con facetas por sexo y edad_grupos
grafico = enc_dengue_2017.mark_line().facet(
    row='sexo:N',  # Facetas por sexo
    column='edad_grupos:N'  # Facetas por grupo de edad
)
# Mostrar el gráfico
grafico
Out[24]:

tercer gráfico

In [26]:
# como el anterior, pero con log en la Y

enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',
    y=alt.Y('sum(case):Q', scale=alt.Scale(type='log')),
    color='enfermedad_text:N',
    tooltip=['sum(case):Q','semana:Q']
).interactive()

enc_dengue_2017.mark_line().facet(
    row='sexo:N',
    column='edad_grupos:N'
)
Out[26]:
In [28]:
# tabla 

indexList=['edad_grupos','semana','sexo','enfermedad_text']
aggregator={'edad': ['median']}
LevelByYear_2017_medians=dengue_2017.groupby(indexList,observed=True).agg(aggregator)
LevelByYear_2017_medians
Out[28]:
edad
median
edad_grupos semana sexo enfermedad_text
a_menor_a_16 1 F 1_SIN_SEÑALES 9.0
2_ALARMA 6.0
M 1_SIN_SEÑALES 11.0
2_ALARMA 12.5
3_GRAVE 11.0
... ... ... ... ...
c_mayor_a_50 52 F 1_SIN_SEÑALES 68.0
2_ALARMA 63.0
M 1_SIN_SEÑALES 59.5
2_ALARMA 62.0
3_GRAVE 69.0

726 rows × 1 columns

In [29]:
LevelByYear_2017_medians.unstack(['sexo','enfermedad_text'])
Out[29]:
edad
median
sexo F M
enfermedad_text 1_SIN_SEÑALES 2_ALARMA 3_GRAVE 1_SIN_SEÑALES 2_ALARMA 3_GRAVE
edad_grupos semana
a_menor_a_16 1 9.0 6.0 NaN 11.0 12.5 11.0
2 13.0 12.5 NaN 10.0 12.0 5.0
3 9.0 11.0 NaN 9.0 11.0 4.0
4 10.0 12.0 NaN 11.0 4.0 NaN
5 9.0 7.0 NaN 11.0 12.0 NaN
... ... ... ... ... ... ... ...
c_mayor_a_50 48 63.0 57.0 61.0 56.0 64.0 NaN
49 65.0 65.0 NaN 64.0 NaN 81.0
50 63.0 NaN NaN 57.0 56.0 NaN
51 58.0 75.0 NaN 59.0 73.0 NaN
52 68.0 63.0 NaN 59.5 62.0 69.0

156 rows × 6 columns

In [30]:
# mmmm

LevelByYear_2017_medians.info()
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 726 entries, ('a_menor_a_16', np.int64(1), 'F', '1_SIN_SEÑALES') to ('c_mayor_a_50', np.int64(52), 'M', '3_GRAVE')
Data columns (total 1 columns):
 #   Column          Non-Null Count  Dtype  
---  ------          --------------  -----  
 0   (edad, median)  726 non-null    float64
dtypes: float64(1)
memory usage: 9.3+ KB

cuarto grafico

In [32]:
# grafico puntitos de la suma de casos seccionado en Sinseñales, Alarma y Grave

alt_dengue_2017=alt.Chart(dengue)
enc_dengue_2017=alt_dengue_2017.encode(
    x='semana:Q',
    y=alt.Y('sum(case):Q', scale=alt.Scale(type='log')),
    column='enfermedad_text:N'
)
enc_dengue_2017.mark_circle() 
Out[32]:

quinto grafico

In [33]:
# en vez de puntos lineas

alt_dengue_2017 = alt.Chart(dengue_2017)
enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',  # Eje x para las semanas, cuantitativo
    y=alt.Y('sum(case):Q', scale=alt.Scale(type='log')),  # Suma de casos en escala logarítmica
    column='enfermedad_text:N'  # Crear columnas por tipo de enfermedad
)
enc_dengue_2017.mark_rule()
Out[33]:

sexto grafico

In [35]:
# lo mismo

alt_dengue_2017 = alt.Chart(dengue_2017)
enc_dengue_2017 = alt_dengue_2017.encode(
    x='semana:Q',  
    y=alt.Y('sum(case):Q', scale=alt.Scale(type='log')),  # Suma de casos en escala logarítmica
    column='enfermedad_text:N'  # Crear columnas por tipo de enfermedad
)
enc_dengue_2017.mark_bar() # aca es bar
Out[35]:
In [43]:
# tabla aggregation 

indexList=['edad_grupos','semana','sexo','enfermedad_text']
aggregator={'edad': ['median','mean','min','max']}
LevelSemanal_2017_statsFull=dengue_2017.groupby(indexList,observed=True).agg(aggregator)
LevelSemanal_2017_statsFull
Out[43]:
edad
median mean min max
edad_grupos semana sexo enfermedad_text
a_menor_a_16 1 F 1_SIN_SEÑALES 9.0 8.750000 1 15
2_ALARMA 6.0 7.111111 2 14
M 1_SIN_SEÑALES 11.0 9.684211 1 15
2_ALARMA 12.5 10.125000 2 14
3_GRAVE 11.0 11.000000 11 11
... ... ... ... ... ... ... ...
c_mayor_a_50 52 F 1_SIN_SEÑALES 68.0 66.375000 51 78
2_ALARMA 63.0 62.666667 54 71
M 1_SIN_SEÑALES 59.5 63.666667 51 87
2_ALARMA 62.0 62.333333 57 68
3_GRAVE 69.0 69.000000 69 69

726 rows × 4 columns

In [45]:
#tabla en formato ..

LevelSemanal_2017_statsFull.stack(future_stack=True)
Out[45]:
edad
edad_grupos semana sexo enfermedad_text
a_menor_a_16 1 F 1_SIN_SEÑALES median 9.00
mean 8.75
min 1.00
max 15.00
2_ALARMA median 6.00
... ... ... ... ... ...
c_mayor_a_50 52 M 2_ALARMA max 68.00
3_GRAVE median 69.00
mean 69.00
min 69.00
max 69.00

2904 rows × 1 columns

Mining location para el año 2017¶

In [46]:
indexList=['semana','departamento','provincia','enfermedad_text']
aggregator={'case':['sum']}
semanalPlace_2017=dengue_2017.groupby(indexList,observed=True).agg(aggregator)
semanalPlace_2017
Out[46]:
case
sum
semana departamento provincia enfermedad_text
1 AYACUCHO HUANTA 1_SIN_SEÑALES 9
2_ALARMA 2
LA MAR 1_SIN_SEÑALES 5
2_ALARMA 2
CAJAMARCA CONTUMAZA 1_SIN_SEÑALES 16
... ... ... ... ...
52 PIURA MORROPON 1_SIN_SEÑALES 1
PIURA 1_SIN_SEÑALES 13
SULLANA 1_SIN_SEÑALES 9
UCAYALI CORONEL PORTILLO 1_SIN_SEÑALES 23
2_ALARMA 3

2626 rows × 1 columns

In [48]:
# tabla en wide
semanalPlace_2017.unstack()
Out[48]:
case
sum
enfermedad_text 1_SIN_SEÑALES 2_ALARMA 3_GRAVE
semana departamento provincia
1 AYACUCHO HUANTA 9.0 2.0 NaN
LA MAR 5.0 2.0 NaN
CAJAMARCA CONTUMAZA 16.0 NaN NaN
CUSCO LA CONVENCION 18.0 3.0 NaN
HUANUCO LEONCIO PRADO 1.0 NaN NaN
... ... ... ... ... ...
52 MADRE DE DIOS TAMBOPATA 33.0 21.0 2.0
PIURA MORROPON 1.0 NaN NaN
PIURA 13.0 NaN NaN
SULLANA 9.0 NaN NaN
UCAYALI CORONEL PORTILLO 23.0 3.0 NaN

1795 rows × 3 columns

In [51]:
# no missing values
semanalPlace_wide_2017=semanalPlace_2017.unstack().fillna(0)
semanalPlace_wide_2017
Out[51]:
case
sum
enfermedad_text 1_SIN_SEÑALES 2_ALARMA 3_GRAVE
semana departamento provincia
1 AYACUCHO HUANTA 9.0 2.0 0.0
LA MAR 5.0 2.0 0.0
CAJAMARCA CONTUMAZA 16.0 0.0 0.0
CUSCO LA CONVENCION 18.0 3.0 0.0
HUANUCO LEONCIO PRADO 1.0 0.0 0.0
... ... ... ... ... ...
52 MADRE DE DIOS TAMBOPATA 33.0 21.0 2.0
PIURA MORROPON 1.0 0.0 0.0
PIURA 13.0 0.0 0.0
SULLANA 9.0 0.0 0.0
UCAYALI CORONEL PORTILLO 23.0 3.0 0.0

1795 rows × 3 columns

In [52]:
#
sumCases=semanalPlace_wide_2017.sum(axis=1)
sumCases
Out[52]:
semana  departamento   provincia       
1       AYACUCHO       HUANTA              11.0
                       LA MAR               7.0
        CAJAMARCA      CONTUMAZA           16.0
        CUSCO          LA CONVENCION       21.0
        HUANUCO        LEONCIO PRADO        1.0
                                           ... 
52      MADRE DE DIOS  TAMBOPATA           56.0
        PIURA          MORROPON             1.0
                       PIURA               13.0
                       SULLANA              9.0
        UCAYALI        CORONEL PORTILLO    26.0
Length: 1795, dtype: float64
In [53]:
# para ver el peor lugar!

shareAlarma=semanalPlace_wide_2017.loc[:,('case','sum','2_ALARMA')]/sumCases
shareAlarma.name='shareAlarma'
shareAlarma
Out[53]:
semana  departamento   provincia       
1       AYACUCHO       HUANTA              0.181818
                       LA MAR              0.285714
        CAJAMARCA      CONTUMAZA           0.000000
        CUSCO          LA CONVENCION       0.142857
        HUANUCO        LEONCIO PRADO       0.000000
                                             ...   
52      MADRE DE DIOS  TAMBOPATA           0.375000
        PIURA          MORROPON            0.000000
                       PIURA               0.000000
                       SULLANA             0.000000
        UCAYALI        CORONEL PORTILLO    0.115385
Name: shareAlarma, Length: 1795, dtype: float64
In [54]:
# tablaaa

shareAlarma=shareAlarma.reset_index()
shareAlarma
Out[54]:
semana departamento provincia shareAlarma
0 1 AYACUCHO HUANTA 0.181818
1 1 AYACUCHO LA MAR 0.285714
2 1 CAJAMARCA CONTUMAZA 0.000000
3 1 CUSCO LA CONVENCION 0.142857
4 1 HUANUCO LEONCIO PRADO 0.000000
... ... ... ... ...
1790 52 MADRE DE DIOS TAMBOPATA 0.375000
1791 52 PIURA MORROPON 0.000000
1792 52 PIURA PIURA 0.000000
1793 52 PIURA SULLANA 0.000000
1794 52 UCAYALI CORONEL PORTILLO 0.115385

1795 rows × 4 columns

In [55]:
# peor provincia por región en semanas

where = shareAlarma.groupby(['semana','departamento'])['shareAlarma'].idxmax()
worst_prov_semana = shareAlarma.loc[where].reset_index(drop=True)
worst_prov_semana
Out[55]:
semana departamento provincia shareAlarma
0 1 AYACUCHO LA MAR 0.285714
1 1 CAJAMARCA CONTUMAZA 0.000000
2 1 CUSCO LA CONVENCION 0.142857
3 1 HUANUCO LEONCIO PRADO 0.000000
4 1 ICA PALPA 0.000000
... ... ... ... ...
752 52 LIMA LIMA 1.000000
753 52 LORETO REQUENA 1.000000
754 52 MADRE DE DIOS TAMBOPATA 0.375000
755 52 PIURA MORROPON 0.000000
756 52 UCAYALI CORONEL PORTILLO 0.115385

757 rows × 4 columns

In [57]:
# descriptivo de los peores

worst_prov_semana.shareAlarma.describe()
Out[57]:
count    757.000000
mean       0.240214
std        0.330670
min        0.000000
25%        0.000000
50%        0.062500
75%        0.375000
max        1.000000
Name: shareAlarma, dtype: float64
In [58]:
# cantidad de peores casos por prov por region
len(worst_prov_semana.provincia.value_counts())
Out[58]:
65

el de la clase es 79

In [59]:
# amount of worst provinces per region - cleaner
len(worst_prov_semana[worst_prov_semana.shareAlarma>0].provincia.value_counts())
Out[59]:
62

el de la clase es 74

In [60]:
# sharealarma > 0 

worst_ProvSemana_alarma=worst_prov_semana[worst_prov_semana.shareAlarma>0].loc[:,['departamento','provincia']]
worst_ProvSemana_alarma.reset_index(drop=True,inplace=True)
worst_ProvSemana_alarma
Out[60]:
departamento provincia
0 AYACUCHO LA MAR
1 CUSCO LA CONVENCION
2 LA LIBERTAD CHEPEN
3 LORETO MAYNAS
4 MADRE DE DIOS TAMBOPATA
... ... ...
449 LA LIBERTAD TRUJILLO
450 LIMA LIMA
451 LORETO REQUENA
452 MADRE DE DIOS TAMBOPATA
453 UCAYALI CORONEL PORTILLO

454 rows × 2 columns

In [62]:
indexList=['departamento','provincia']
aggregator={'provincia':['count']}
worst_ProvSemana_alarma_Frequency=worst_ProvSemana_alarma.groupby(indexList,observed=True).agg(aggregator)
worst_ProvSemana_alarma_Frequency
Out[62]:
provincia
count
departamento provincia
AMAZONAS UTCUBAMBA 2
ANCASH CASMA 1
SANTA 15
AYACUCHO HUAMANGA 1
HUANTA 17
... ... ...
TUMBES TUMBES 12
ZARUMILLA 5
UCAYALI ATALAYA 18
CORONEL PORTILLO 17
PADRE ABAD 6

62 rows × 1 columns

In [63]:
# descriptivo q muestra cuantas semanas una prov fue la mas afectada

worst_ProvSemana_alarma_Frequency.describe()
Out[63]:
provincia
count
count 62.000000
mean 7.322581
std 7.460880
min 1.000000
25% 2.000000
50% 5.000000
75% 11.000000
max 32.000000
In [64]:
# final look
worst_ProvSemana_alarma_Frequency.columns=['semanasAffected']
worst_ProvSemana_alarma_Frequency=worst_ProvSemana_alarma_Frequency[worst_ProvSemana_alarma_Frequency.semanasAffected>2]
worst_ProvSemana_alarma_Frequency.reset_index(inplace=True)
worst_ProvSemana_alarma_Frequency
Out[64]:
departamento provincia semanasAffected
0 ANCASH SANTA 15
1 AYACUCHO HUANTA 17
2 AYACUCHO LA MAR 21
3 CUSCO LA CONVENCION 27
4 HUANUCO LEONCIO PRADO 12
5 ICA ICA 7
6 ICA NAZCA 3
7 ICA PALPA 15
8 JUNIN CHANCHAMAYO 12
9 JUNIN SATIPO 6
10 LA LIBERTAD ASCOPE 4
11 LA LIBERTAD CHEPEN 11
12 LA LIBERTAD PACASMAYO 6
13 LA LIBERTAD TRUJILLO 13
14 LA LIBERTAD VIRU 3
15 LAMBAYEQUE CHICLAYO 16
16 LAMBAYEQUE LAMBAYEQUE 4
17 LIMA LIMA 11
18 LORETO DATEM DEL MARAÑON 4
19 LORETO LORETO 5
20 LORETO MAYNAS 32
21 LORETO REQUENA 5
22 MADRE DE DIOS MANU 3
23 MADRE DE DIOS TAHUAMANU 3
24 MADRE DE DIOS TAMBOPATA 32
25 PIURA HUANCABAMBA 5
26 PIURA PAITA 15
27 PIURA PIURA 3
28 PIURA SECHURA 11
29 PIURA SULLANA 8
30 PIURA TALARA 5
31 SAN MARTIN HUALLAGA 3
32 SAN MARTIN MARISCAL CACERES 10
33 SAN MARTIN MOYOBAMBA 6
34 SAN MARTIN SAN MARTIN 6
35 SAN MARTIN TOCACHE 4
36 TUMBES CONTRALMIRANTE VILLAR 5
37 TUMBES TUMBES 12
38 TUMBES ZARUMILLA 5
39 UCAYALI ATALAYA 18
40 UCAYALI CORONEL PORTILLO 17
41 UCAYALI PADRE ABAD 6

septimo grafico

In [66]:
alt_worstProv=alt.Chart(worst_ProvSemana_alarma_Frequency)

enc_worstProv=alt_worstProv.encode(
    y='departamento',
    x='provincia',
    text='semanasAffected:O',
    size='semanasAffected:O'
)

enc_worstProv.mark_text()
Out[66]:
In [67]:
#  

indexList=['semana','departamento','enfermedad_text']
aggregator={'case':['sum']}
SemanaDepa=dengue_2017.groupby(indexList,observed=True).agg(aggregator)
SemanaDepa_wide=SemanaDepa.unstack().fillna(0)
SemanaDepaAlarm=SemanaDepa_wide.loc[:,('case','sum','2_ALARMA')]/SemanaDepa_wide.sum(axis=1)
SemanaDepaAlarm.name='alarmShare'

SemanaDepaAlarm=SemanaDepaAlarm.reset_index()
SemanaDepaAlarm
Out[67]:
semana departamento alarmShare
0 1 AYACUCHO 0.222222
1 1 CAJAMARCA 0.000000
2 1 CUSCO 0.142857
3 1 HUANUCO 0.000000
4 1 ICA 0.000000
... ... ... ...
752 52 LIMA 1.000000
753 52 LORETO 0.478261
754 52 MADRE DE DIOS 0.375000
755 52 PIURA 0.000000
756 52 UCAYALI 0.115385

757 rows × 3 columns

In [68]:
# descriptivoos nievl dep

SemanaDepaAlarm.describe()
Out[68]:
semana alarmShare
count 757.000000 757.000000
mean 25.394980 0.122590
std 14.666437 0.184344
min 1.000000 0.000000
25% 13.000000 0.000000
50% 24.000000 0.040000
75% 38.000000 0.166667
max 52.000000 1.000000
In [69]:
# filtrando mayores a 0

SemanaDepaAlarm_focus=SemanaDepaAlarm[SemanaDepaAlarm.alarmShare>0]
In [70]:
# el descriptivo

SemanaDepaAlarm_focus.describe()
Out[70]:
semana alarmShare
count 454.000000 454.000000
mean 22.991189 0.204407
std 14.144942 0.199880
min 1.000000 0.003367
25% 12.000000 0.058824
50% 21.000000 0.142857
75% 34.000000 0.285714
max 52.000000 1.000000
In [71]:
#  
edges=[-1, .10, .25, .5,1]
theLabels=["a.below10%","b.11-25%","c.26-50%","d.above50%"]
SemanaDepaAlarm_focus.loc[:,"alarmLevels"]=pd.cut(SemanaDepaAlarm_focus['alarmShare'],
                                            include_lowest=True,
                                            bins=edges, 
                                            labels=theLabels,
                                            ordered=True)

##
SemanaDepaAlarm_focus.head()
C:\Users\YHARA\AppData\Local\Temp\ipykernel_12032\4040302067.py:4: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  SemanaDepaAlarm_focus.loc[:,"alarmLevels"]=pd.cut(SemanaDepaAlarm_focus['alarmShare'],
Out[71]:
semana departamento alarmShare alarmLevels
0 1 AYACUCHO 0.222222 b.11-25%
2 1 CUSCO 0.142857 b.11-25%
6 1 LA LIBERTAD 1.000000 d.above50%
7 1 LORETO 0.153846 b.11-25%
8 1 MADRE DE DIOS 0.250000 b.11-25%

Octavo grafico

In [80]:
###
#lightgreyred
alt_WorstDepa=alt.Chart(SemanaDepaAlarm_focus).encode(x='semana:O',
                                                      y=alt.Y('departamento:N',
                                                              sort=alt.EncodingSortField(field='alarmShare',op='max',order='descending')))
enc1_WorstDepa=alt_WorstDepa.encode(
    color=alt.Color('alarmLevels:O').scale(scheme="purplebluegreen", reverse=False)
)

enc1_WorstDepa.mark_rect()
Out[80]:

noveno grafico

In [81]:
# el mismo grafico pero sincolores

enc2_WorstDepa=alt_WorstDepa.encode(
    text=alt.Text('alarmShare:Q', format=".1f"),
    opacity=alt.condition('datum.alarmShare >= 0.3', alt.value(1), alt.value(0)))
enc2_WorstDepa.mark_text(fontStyle='bold')
Out[81]:

decimo grafico

In [82]:
enc1_WorstDepa.mark_rect() + enc2_WorstDepa.mark_text()
Out[82]:
In [ ]: